
//1616.分割两个字符串得到回文串
class Solution {
public:
    bool same(string& s)  //判断是否是回文字符串
    {
        int left=0,right=s.size()-1;
        while(left<right)
            if(s[left++]!=s[right--]) return false; 

        return true;
    }

    bool checkP(string prev,string next)
    {
        //通过同向双指针找第一个不相同的位置，以该位置作为基点将左右两边进行拼接，判断拼接后是否形成回文字符串
        int n=prev.size();
        int left=0,right=n-1;
        while(left<right)
        {
            if(prev[left]!=next[right]) 
            {
                //[0,left)和[left,n)
                string tmp1=prev.substr(0,left);
                tmp1+=next.substr(left,n-left);

                //[0,right]和(right,n)
                string tmp2=prev.substr(0,right+1);
                tmp2+=next.substr(right+1,n-right-1);
                return same(tmp1)||same(tmp2);
            }
            left++,right--;
        }
        return true;
    }
    

    bool checkPalindromeFormation(string a, string b) {   
        return checkP(a,b)||checkP(b,a);
    }
};